home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / A-COMAL Series / (k)aab.d64 / proc.fft < prev    next >
Text File  |  2007-02-28  |  2KB  |  51 lines

  1. 0030 //
  2. 0040 ╨╥╧├ FFT(╥┼╞ REAL'DATA(),╥┼╞ IMAG'DATA(),LOG2'NUM'OF'DATA#) ├╠╧╙┼─
  3. 0050   // ╞OURIER TRANSFORM OF COMPLEX SERIES:
  4. 0060   // REAL'DATA(I)+J*IMAG'DATA(I)  I=1....2^LOG2'NUM'OF'DATA#
  5. 0070   //     FROM ┬RIGHAM, ┼.╧. 1974
  6. 0080   //     ╘HE ╞AST ╞OURIER ╘RANSFORM
  7. 0090   //     ╨RENTICE-╚ALL. P.164-165
  8. 0100   //
  9. 0110   TWO'PI:=2*╨╔
  10. 0120   NUM'OF'DATA#:=2^LOG2'NUM'OF'DATA#
  11. 0130   SEGMENT'SIZE#:=╔╬╘(NUM'OF'DATA#/2)
  12. 0140   LOG2'PART#:=LOG2'NUM'OF'DATA#-1
  13. 0150   K#:=0
  14. 0160   ╞╧╥ L#:=1 ╘╧ LOG2'NUM'OF'DATA# ─╧
  15. 0170     ╥┼╨┼┴╘ 
  16. 0180       ╞╧╥ I#:=1 ╘╧ SEGMENT'SIZE# ─╧
  17. 0190         P:=BIT'REVERSE#(╔╬╘(K#/SEGMENT'SIZE#),LOG2'NUM'OF'DATA#)
  18. 0200         ARG:=TWO'PI*P/NUM'OF'DATA#
  19. 0210         C:=├╧╙(ARG)
  20. 0220         S:=╙╔╬(ARG)
  21. 0230         K'PLUS'1#:=K#+1
  22. 0240         INDEX#:=K'PLUS'1#+SEGMENT'SIZE#
  23. 0250         REAL'TEMP:=REAL'DATA(INDEX#)*C+IMAG'DATA(INDEX#)*S
  24. 0260         IMAG'TEMP:=IMAG'DATA(INDEX#)*C-REAL'DATA(INDEX#)*S
  25. 0270         REAL'DATA(INDEX#):=REAL'DATA(K'PLUS'1#)-REAL'TEMP
  26. 0280         IMAG'DATA(INDEX#):=IMAG'DATA(K'PLUS'1#)-IMAG'TEMP
  27. 0290         REAL'DATA(K'PLUS'1#):=REAL'DATA(K'PLUS'1#)+REAL'TEMP
  28. 0300         IMAG'DATA(K'PLUS'1#):=IMAG'DATA(K'PLUS'1#)+IMAG'TEMP
  29. 0310         K#:=K#+1
  30. 0320       ┼╬─╞╧╥ I#
  31. 0330       K#:=K#+SEGMENT'SIZE#
  32. 0340     ╒╬╘╔╠ K#>=NUM'OF'DATA#
  33. 0350     K#:=0
  34. 0360     LOG2'PART#:=LOG2'PART#-1
  35. 0370     SEGMENT'SIZE#:=╔╬╘(SEGMENT'SIZE#/2)
  36. 0380   ┼╬─╞╧╥ L#
  37. 0390   // UNSCRAMBLE THE TRANSFORMED ARRAY:
  38. 0400   ╞╧╥ K#:=1 ╘╧ NUM'OF'DATA# ─╧
  39. 0410     K'MINUS'1#:=K#-1
  40. 0420     I#:=BIT'REVERSE#(K'MINUS'1#,LOG2'NUM'OF'DATA#)+1
  41. 0430     ╔╞ I#>K# ╘╚┼╬
  42. 0440       REAL'TEMP:=REAL'DATA(K#)
  43. 0450       IMAG'TEMP:=IMAG'DATA(K#)
  44. 0460       REAL'DATA(K#):=REAL'DATA(I#)
  45. 0470       IMAG'DATA(K#):=IMAG'DATA(I#)
  46. 0480       REAL'DATA(I#):=REAL'TEMP
  47. 0490       IMAG'DATA(I#):=IMAG'TEMP
  48. 0500     ┼╬─╔╞ 
  49. 0510   ┼╬─╞╧╥ K#
  50. 0520 ┼╬─╨╥╧├ FFT
  51.